package top.callback.inf.beautyleaf.server.common;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.io.Serializable;

/**
 * 接口统一返回
 *
 * @author Pengyu Gan
 * CreateDate 2021/3/30
 */
@Data
@Schema(description = "接口统一返回模型")
public class LeafResult<T> implements Serializable {

    /**
     * 请求是否成功
     */
    @Schema(description = "请求是否成功，只要没有出现异常都算成功。")
    private boolean success;

    /**
     * 响应码
     */
    @Schema(description = "请求响应码。非 HTTP 响应码，200 表示请求成功，300 表示出现异常。")
    private int code = SUCCESS;

    /**
     * 提示信息
     */
    @Schema(description = "请求响应的提示信息，通常为异常信息。")
    private String message;

    /**
     * 响应数据
     */
    @Schema(description = "请求响应数据，出现异常时为 null。")
    private T data;

    public static final int SUCCESS = 200;

    public static final int UNKNOWN = 300;

    private LeafResult(T data) {
        this.success = true;
        this.data = data;
    }

    private LeafResult(String message) {
        this.success = false;
        this.code = UNKNOWN;
        this.message = message;
    }

    /**
     * 请求成功
     * @param data 返回数据
     * @param <T> 数据类型
     * @return {@link LeafResult}
     */
    public static <T> LeafResult<T> success(T data) {
        return new LeafResult<>(data);
    }

    /**
     * 请求失败
     * @param message 错误信息
     * @param <T> 数据类型
     * @return {@link LeafResult}
     */
    public static <T> LeafResult<T> error(String message) {
        return new LeafResult<>(message);
    }

}
